﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

using Gra.Seguros.Servicio.Bl;
using Gra.Seguros.Servicio.Be;
using Gra.Seguros.Servicio.Ws.Be;

namespace Gra.Seguros.Servicio.Ws
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "PolizaSeguro" in code, svc and config file together.
    public class PolizaSeguro : IPolizaSeguro
    {
        public List<MonedaWs> listarMonedas()
        {
            MonedaBl obj = new MonedaBl();
            List<MonedaBe> lst = new List<MonedaBe>();
            lst = obj.listar();
            var lQuery = from c in lst
                         select new MonedaWs
                         {
                             cMoneda = c.cMoneda,
                             dMoneda = c.dMoneda,
                             dSimbolo=c.dSimbolo
                         };
            return lQuery.ToList();
        }

        public List<EstadoPolizaWs> listarEstadoPoliza()
        {
            EstadoPolizaBl obj = new EstadoPolizaBl();
            List<EstadoPolizaBe> lst = new List<EstadoPolizaBe>();
            lst = obj.listar();
            var lQuery = from c in lst
                         select new EstadoPolizaWs
                         {
                            cEstadoPoliza=c.cEstadoPoliza,
                            dEstadoPoliza=c.dEstadoPoliza
                         };
            return lQuery.ToList();
        }

        public List<RenovacionWs> listarRenovacion()
        {
            RenovacionBl obj = new RenovacionBl();
            List<RenovacionBe> lst = new List<RenovacionBe>();
            lst = obj.listar();
            var lQuery = from c in lst
                         select new RenovacionWs
                         {
                             cRenovacion=c.cRenovacion,
                             dRenovacion=c.dRenovacion
                         };
            return lQuery.ToList();
        }


        public List<PCTComisionWs> listarPCTComision(string _cAseguradora)
        {
            PCTComisionBl obj = new PCTComisionBl();
            List<PCTComisionBe> lst = new List<PCTComisionBe>();
            lst = obj.listar(Convert.ToInt32(_cAseguradora));
            var lQuery = from c in lst
                         select new PCTComisionWs
                         {
                            cComision=c.cComision,
                            PCTComision=c.PCTComision                            
                         };
            return lQuery.ToList();
        }

        public List<PCTComisionVenWs> listarPCTComisionVen(string _cVendedor)
        {
            PCTComisionVenBl obj = new PCTComisionVenBl();
            List<PCTComisionVenBe> lst = new List<PCTComisionVenBe>();
            lst = obj.listar(Convert.ToInt32(_cVendedor));
            var lQuery = from c in lst
                         select new PCTComisionVenWs
                         {
                             cComisionVen = c.cComisionVen,
                             PCTComisionVen = c.PCTComisionVen
                         };
            return lQuery.ToList();
        }

        public List<TipoPagoWs> listarTipoPago()
        {
            TipoPagoBl obj = new TipoPagoBl();
            List<TipoPagoBe> lst = new List<TipoPagoBe>();
            lst = obj.listar();
            var lQuery = from c in lst
                         select new TipoPagoWs
                         {
                             cTipoPago = c.cTipoPago,
                             dTipoPago = c.dTipoPago                             
                         };
            return lQuery.ToList();
        }

        public List<FormaPagoWs> listarFormaPago(string _cTipoPago)
        {
            FormaPagoBl obj = new FormaPagoBl();
            List<FormaPagoBe> lst = new List<FormaPagoBe>();
            lst = obj.listar(Convert.ToInt32(_cTipoPago));
            var lQuery = from c in lst
                         select new FormaPagoWs
                         {
                             cFormaPago = c.cFormaPago,
                             dFormaPago = c.dFormaPago
                         };
            return lQuery.ToList();
        }

        public List<PlanSeguroWs> listarPlanSeguro_Ramo(string _cAseguradora,string _cRamo)
        {
            PlanSeguroBl obj = new PlanSeguroBl();
            List<PlanSeguroBe> lst = new List<PlanSeguroBe>();
            lst = obj.listarPlanSeguroxRamo(Convert.ToInt32(_cAseguradora),Convert.ToInt32(_cRamo));
            var lQuery = from c in lst
                         select new PlanSeguroWs
                         {
                             cPlanSeguro = c.cPlan,
                             dPlanSeguro = c.dPlan                             
                         };
            return lQuery.ToList();
        }

        public List<VendedorWs> listarVendedor()
        {
            VendedorBl obj = new VendedorBl();
            List<VendedorBe> lst = new List<VendedorBe>();
            lst = obj.listar();
            var lQuery = from c in lst
                         select new VendedorWs
                         {
                             cVendedor=c.cVendedor,
                             dVendedor=c.dVendedor
                         };
            return lQuery.ToList();
        }

        public List<PolizaWs> listarPolizaxnumPoliza(string _cPoliza)
        {
            PolizaBl obj = new PolizaBl();
            List<PolizaBe> lst = new List<PolizaBe>();
            lst = obj.listarPoliza(Convert.ToInt32(_cPoliza));
            var lQuery = from c in lst
                         select new PolizaWs
                         {
                             cPoliza = c.cPoliza,
                             cPolizaSBS = c.cPolizaSBS,
                             fEmision = c.fEmision,
                             fInicioVigencia = c.fInicioVigencia,
                             fFinVigencia = c.fFinVigencia,
                             cMoneda=c.oMoneda.cMoneda,
                             nMontoAsegurado=c.nMontoAsegurado,
                             nComision=c.nComision,
                             nComisionVen=c.nComisionVen,
                             nPrimaNeta=c.nPrimaNeta,
                             nDerEmis1=c.nDerEmis1,
                             nTotal=c.nTotal,
                             nCuota=c.nCuota,
                             cCliente = c.oCliente.cCliente,                                                          
                             cTipoDocumento=c.oCliente.TipoDocumento.cTipoDocumento,
                             nNroDocumento=c.oCliente.nNroDocumento,
                             cComisionCia=c.oComisionCia.cComision,
                             cComisionVen=c.oComisionVen.cComisionVen,
                             cCotizacion=c.oCotizacion.cCotizacion,
                             cAseguradora=c.oAseguradora.cAseguradora,
                             cEjecutivo = c.oEjecutivo.cEjecutivo,
                             cRamo = c.oRamo.cRamo,
                             cTipoSeguro=c.oRamo.oTipoSeguro.cTipoSeguro,
                             cTipoPago=c.oFormaPago.oTipoPago.cTipoPago,
                             cFormaPago=c.oFormaPago.cFormaPago,
                             dUCreacion=c.dUCreacion,
                             cEstadoPoliza = c.oEstadoPoliza.cEstadoPoliza,
                             cRenovacion=c.oRenovacion.cRenovacion,
                             cRecepcionDocumento = c.cRecepcionDocumento,
                             cVendedor=c.oComisionVen.oVendedor.cVendedor,
                             nimpcuota= c.nimpcuota,
                             nCuotaInicial=c.nCuotaInicial,
                             fvencimiento=c.fvencimiento,                             
                         };
            return lQuery.ToList();
        }

        public List<PolizaWs> listarClientePoliza(string _cCliente)
        {
            PolizaBl obj = new PolizaBl();
            List<PolizaBe> lst = new List<PolizaBe>();
            lst = obj.listarPolizaxCliente(Convert.ToInt32(_cCliente));
            var lQuery = from c in lst
                         select new PolizaWs
                         {
                             cPoliza = c.cPoliza,
                             nroPoliza=c.nroPoliza,
                             cPolizaSBS = c.cPolizaSBS,                             
                             dAseguradora=c.oAseguradora.dAseguradora,
                             fEmision = c.fEmision,
                             fInicioVigencia = c.fInicioVigencia,
                             fFinVigencia = c.fFinVigencia,
                             nPrimaNeta = c.nPrimaNeta,
                             dEstadoPoliza = c.oEstadoPoliza.dEstadoPoliza,                             
                         };
            return lQuery.ToList();
        }

        public List<PolizaWs> listarClientePolizaCronograma(string _cCliente, string _cPoliza)
        {
            PolizaBl obj = new PolizaBl();
            List<PolizaBe> lst = new List<PolizaBe>();
            lst = obj.listarPolizaCronogramaxCliente(Convert.ToInt32(_cCliente),Convert.ToInt32(_cPoliza));
            var lQuery = from c in lst
                         select new PolizaWs
                         {
                             cPoliza = c.cPoliza,
                             nroPoliza = c.nroPoliza,
                             fvencimiento =c.fvencimiento,
                             nCuota=c.nCuota,
                             nCuotaInicial=c.nCuotaInicial,
                             nimpcuota=c.nimpcuota,                                                                                                                    
                             dEstadoPago = c.dEstadoPago,
                             fPago=c.fPago,
                         };
            return lQuery.ToList();
        }

        public List<SiniestroWs> listarClientePolizaSiniestro(string _cCliente)
        {
            SiniestroBl obj = new SiniestroBl();
            List<SiniestroBe> lst = new List<SiniestroBe>();
            lst = obj.listar(Convert.ToInt32(_cCliente));
            var lQuery = from c in lst
                         select new SiniestroWs
                         {
                             cSiniestro = c.cSiniestro,
                             nSiniestro = c.nSiniestro,
                             nSiniestroCia=c.nSiniestroCia,
                             dAjustador=c.dAjustador,
                             dSiniestro=c.dSiniestro,
                             dCausa=c.dCausa,
                             fDenuncia=c.fDenuncia,
                             fCierre=c.fCierre,
                             nPresupuesto=c.nPresupuesto,
                             nPagado=c.nPagado,
                             nAproximado=c.nAproximado,                             
                         };
            return lQuery.ToList();
        }

        public List<VisitaWs> listarClientePolizaVisita(string _cCliente)
        {
            VisitaBl obj = new VisitaBl();
            List<VisitaBe> lst = new List<VisitaBe>();
            lst = obj.listar(Convert.ToInt32(_cCliente));
            var lQuery = from c in lst
                         select new VisitaWs
                         {
                            cVisita = c.cVisita,
                            cEjecutivo = c.oEjecutivo.cEjecutivo,
                            dEjecutivo=c.oEjecutivo.dNombre,
                            fAtencion=c.fAtencion,
                            dResultado=c.dResultado,
                            dTipoResultado=c.dTipoResultado,
                            cEstadoVisita=c.cEstadoVisita,
                            dEstadoVisita=c.dEstadoVisita,                           
                         };
            return lQuery.ToList();
        }


        public List<PolizaWs> listarPoliza(string _cPoliza, string _fCreacionInicio,string _fCreacionFin, string _cCliente, string _cTipoSeguro,string _cRamo, string _cEjecutivo, string _cEstado)
        {
            PolizaBl obj = new PolizaBl();
            List<PolizaBe> lst = new List<PolizaBe>();
            lst = obj.listar(Convert.ToInt32(_cPoliza), _fCreacionInicio, _fCreacionFin, Convert.ToInt32(_cCliente), Convert.ToInt32(_cTipoSeguro), Convert.ToInt32(_cRamo), Convert.ToInt32(_cEjecutivo), Convert.ToInt32(_cEstado));

            var lQuery = from c in lst
                         select new PolizaWs
                         {
                             cPoliza=c.cPoliza,
                             cPolizaSBS = c.cPolizaSBS,
                             fEmision =c.fEmision,                             
                             cRecepcionDocumento=c.cRecepcionDocumento,
                             cCliente = c.oCliente.cCliente,
                             dNombreCliente = (c.oCliente.dNomCliente != "") ? c.oCliente.dNomCliente + " " + c.oCliente.dApeRazonCliente : c.oCliente.dApeRazonCliente,
                             cEjecutivo = c.oEjecutivo.cEjecutivo,
                             dNombreEjecutivo = c.oEjecutivo.dNombre + " " + c.oEjecutivo.dApellido,
                             cRamo = c.oRamo.cRamo,
                             dRamo = c.oRamo.dRamo,
                             cEstadoPoliza=c.oEstadoPoliza.cEstadoPoliza,
                             dEstadoPoliza=c.oEstadoPoliza.dEstadoPoliza
                         };
            return lQuery.ToList();
        }

        public string anularPoliza(string _str_Poliza)
        {
            PolizaBl obj = new PolizaBl();
            _str_Poliza = _str_Poliza.Replace("$", "<");
            _str_Poliza = _str_Poliza.Replace("@", ">");
            _str_Poliza = _str_Poliza.Replace("-", "/");
            return obj.anular(_str_Poliza);
        }

        public string registrarPoliza(PolizaWs _PolizaWs)
        {
            string _msgReg = "";
            PolizaBl obj = new PolizaBl();
            PolizaBe _objCab = new PolizaBe();
            _objCab.cPoliza = _PolizaWs.cPoliza;
            _objCab.oCliente = new ClienteBe();
            _objCab.oCliente.TipoDocumento = new TipoDocumentoBe();
            _objCab.oCliente.TipoDocumento.cTipoDocumento = _PolizaWs.cTipoDocumento;
            _objCab.oCliente.nNroDocumento = _PolizaWs.nNroDocumento;
            _objCab.cPolizaSBS = _PolizaWs.cPolizaSBS;            
            _objCab.fEmision = _PolizaWs.fEmision;
            _objCab.fInicioVigencia = _PolizaWs.fInicioVigencia;
            _objCab.fFinVigencia = _PolizaWs.fFinVigencia;
            _objCab.oMoneda = new MonedaBe();
            _objCab.oMoneda.cMoneda = _PolizaWs.cMoneda;
            _objCab.nMontoAsegurado = _PolizaWs.nMontoAsegurado;
            _objCab.nComision = _PolizaWs.nComision;
            _objCab.nComisionVen = _PolizaWs.nComisionVen;
            _objCab.nPrimaNeta = _PolizaWs.nPrimaNeta;
            _objCab.nDerEmis1 = _PolizaWs.nDerEmis1;
            _objCab.nTotal = _PolizaWs.nTotal;
            _objCab.oComisionCia = new PCTComisionBe();
            _objCab.oComisionCia.cComision = _PolizaWs.cComisionCia;
            _objCab.oComisionVen = new PCTComisionVenBe();
            _objCab.oComisionVen.cComisionVen = _PolizaWs.cComisionVen;
            _objCab.oCotizacion = new CotizacionBe();
            _objCab.oCotizacion.cCotizacion = _PolizaWs.cCotizacion;
            _objCab.oAseguradora = new AseguradoraBe();
            _objCab.oAseguradora.cAseguradora = _PolizaWs.cAseguradora;
            _objCab.oEjecutivo = new EjecutivoBe();
            _objCab.oEjecutivo.cEjecutivo = _PolizaWs.cEjecutivo;
            _objCab.oRamo = new RamoBe();
            _objCab.oRamo.cRamo = _PolizaWs.cRamo;
            _objCab.oFormaPago = new FormaPagoBe();
            _objCab.oFormaPago.cFormaPago = _PolizaWs.cFormaPago;
            //_objCab.dUCreacion = _PolizaWs.dUCreacion;
            _objCab.oEstadoPoliza = new EstadoPolizaBe();
            _objCab.oEstadoPoliza.cEstadoPoliza = _PolizaWs.cEstadoPoliza;
            _objCab.oRenovacion = new RenovacionBe();
            _objCab.oRenovacion.cRenovacion = _PolizaWs.cRenovacion;
            _objCab.cRecepcionDocumento = _PolizaWs.cRecepcionDocumento;
            _objCab.nCuota = _PolizaWs.nCuota;
            _objCab.nCuotaInicial = _PolizaWs.nCuotaInicial;
            _objCab.nimpcuota = _PolizaWs.nimpcuota;
            _objCab.fvencimiento = _PolizaWs.fvencimiento;

            _msgReg = obj.registrarPoliza(_objCab);
            return _msgReg;
        }
  
           

        public string actualizarPoliza(PolizaWs _PolizaWs)
        {
            string _msgReg = "";
            PolizaBl obj = new PolizaBl();           
            PolizaBe _objCab = new PolizaBe();
            _objCab.cPoliza = _PolizaWs.cPoliza;
            _objCab.oCliente = new ClienteBe();
            _objCab.oCliente.TipoDocumento = new TipoDocumentoBe();
            _objCab.oCliente.TipoDocumento.cTipoDocumento = _PolizaWs.cTipoDocumento;
            _objCab.oCliente.nNroDocumento = _PolizaWs.nNroDocumento;
            _objCab.cPolizaSBS = _PolizaWs.cPolizaSBS;
            _objCab.fEmision = _PolizaWs.fEmision;
            _objCab.fInicioVigencia = _PolizaWs.fInicioVigencia;
            _objCab.fFinVigencia = _PolizaWs.fFinVigencia;
            _objCab.oMoneda = new MonedaBe();
            _objCab.oMoneda.cMoneda = _PolizaWs.cMoneda;
            _objCab.nMontoAsegurado = _PolizaWs.nMontoAsegurado;
            _objCab.nComision = _PolizaWs.nComision;
            _objCab.nComisionVen = _PolizaWs.nComisionVen;
            _objCab.nPrimaNeta = _PolizaWs.nPrimaNeta;
            _objCab.nDerEmis1 = _PolizaWs.nDerEmis1;
            _objCab.nTotal = _PolizaWs.nTotal;
            _objCab.oComisionCia = new PCTComisionBe();
            _objCab.oComisionCia.cComision = _PolizaWs.cComisionCia;
            _objCab.oComisionVen = new PCTComisionVenBe();
            _objCab.oComisionVen.cComisionVen = _PolizaWs.cComisionVen;
            _objCab.oCotizacion = new CotizacionBe();
            _objCab.oCotizacion.cCotizacion = _PolizaWs.cCotizacion;
            _objCab.oAseguradora = new AseguradoraBe();
            _objCab.oAseguradora.cAseguradora = _PolizaWs.cAseguradora;
            _objCab.oEjecutivo = new EjecutivoBe();
            _objCab.oEjecutivo.cEjecutivo = _PolizaWs.cEjecutivo;
            _objCab.oRamo = new RamoBe();
            _objCab.oRamo.cRamo = _PolizaWs.cRamo;
            _objCab.oFormaPago = new FormaPagoBe();
            _objCab.oFormaPago.cFormaPago = _PolizaWs.cFormaPago;
            //_objCab.dUCreacion = _PolizaWs.dUCreacion;
            _objCab.oEstadoPoliza = new EstadoPolizaBe();
            _objCab.oEstadoPoliza.cEstadoPoliza = _PolizaWs.cEstadoPoliza;
            _objCab.oRenovacion = new RenovacionBe();
            _objCab.oRenovacion.cRenovacion = _PolizaWs.cRenovacion;
            _objCab.cRecepcionDocumento = _PolizaWs.cRecepcionDocumento;                       
            _objCab.nCuota = _PolizaWs.nCuota;
            _objCab.nCuotaInicial = _PolizaWs.nCuotaInicial;
            _objCab.nimpcuota = _PolizaWs.nimpcuota;
            _objCab.fvencimiento = _PolizaWs.fvencimiento;
            //_msgReg = obj.actualizarPoliza(_objCab, _objDet);
            _msgReg = obj.actualizarPoliza(_objCab);
            return _msgReg;

        }   
    }
}
